﻿#region 참조 네임스페이스

using System;
using System.Net;

#endregion

namespace Skying.Net
{
	/// <summary>
	/// <see cref="System.Net.WebClient"/> 클래스를 상속하여 기능을 확장한다.
	/// </summary>
	public class WebClient : System.Net.WebClient
	{
		#region 프로퍼티

		/// <summary>
		/// 요청에 대한 대기 제한 시간을 가져온다.
		/// </summary>
		public int Timeout
		{
			get;
			private set;
		}

		#endregion

		#region 생성자/소멸자

		public WebClient()
		{

		}

		public WebClient(int timeout)
		{
			this.Timeout = timeout;
		}

		#endregion

		#region System.Net.WebRequest

		/// <summary>
		/// <para>지정된 리소스에 대한 <see cref="System.Net.WebRequest"/> 개체를 반환한다.</para>
		/// <para><see cref="System.Net.WebRequest.Timeout"/> 프로퍼티의 값을 설정하기 위해 재정의한다.</para>
		/// </summary>
		/// <param name="address">요청된 <see cref="System.Uri"/>가 전달된다.</param>
		/// <returns><see cref="System.Net.WebRequest"/> 개체가 반환된다.</returns>
		protected override System.Net.WebRequest GetWebRequest(Uri address)
		{
			WebRequest webRequest = base.GetWebRequest(address);

			try
			{
				webRequest.Timeout = Timeout;
			}
			catch (Exception error)
			{
				throw error;
			}

			return webRequest;
		}

		#endregion
	}
}